Skip to content

fix(examples): redesign vse-gamma-cross as sequencer filmstrips on a grading monitor - #268

Merged
TMHSDigital merged 1 commit into
mainfrom
fix/hero-vse-gamma-cross
Sep 26, 2026
Merged

TMHSDigital merged 1 commit into
mainfrom
fix/hero-vse-gamma-cross

Conversation

@TMHSDigital

Copy link
Copy Markdown
Owner

What and why

The gallery review judged the vse-gamma-cross hero weak: a dark board of six small swatches with tiny unreadable labels, and a key comparison (GAMMA_CROSS t=1/2 vs NAIVE LERP t=1/2) of two near-identical lavender squares that read as nothing at card size. The old chips were also emission colours pushed back through the view transform, so they were not the sequencer's own pixels.

This PR is a redesign:

  • The evidence is the sequencer's own output, unaltered. All 32 frames of the cross are rendered by the VSE and tiled side by side into a filmstrip. The GAMMA_CROSS strip sits on top. Directly beneath it is the same pair of strips crossed by the sequencer's linear CROSS effect, frame for frame. Both are mounted with closest-texel emission under the Standard view transform on a hooded grading monitor, beside a three-trackball control surface on a walnut riser. The only authored pixels on the screen are the black surround and three small warm ticks marking the t = 1/2 column. There are no text labels.
  • Endpoints chosen to make the dip as large as possible. The strips now run from orange (1, 0.36, 0) to azure (0, 0.16, 1). Their per-channel square roots sum to 1, so the gamma midpoint is a neutral 0.25 and the lerp midpoint is violet (0.5, 0.26, 0.5). That is a 0.25 deviation, the per-channel maximum (it was 0.115). At thumbnail size the gamma strip clearly sinks into a dark grey valley while the linear strip passes through violet.
  • Check logic unchanged (same span, samples, Q_TOL, LERP_MID_MIN, exit codes 3 to 7). Only the endpoint constants changed, which makes the witnessed deviation larger.
  • Render path gains gates: Layer 1 gallery_framing.check_framing (exit 10; the old render path had none) and a filmstrip guard (exit 9). The guard fails if any frame is not uniform, or if either strip's mid frame is off its closed form, so the lower strip really is the lerp.
  • New finding, now documented: on 5.2 a COLOR strip bakes the scene size into its width/height when it is created. Strips built before the tile resolution was set letterboxed into a thin band, and the first draft rendered exactly that. The code now sets the resolution first, and the uniformity guard catches the mistake.

Not an asset-type example (sequencer), so the asset-sheet gate does not apply.

Before / after

  • Contact sheet (committed): docs/gallery/contact-sheets/vse-gamma-cross-contact-sheet.webp
  • Hero: docs/gallery/assets/vse-gamma-cross-hero.webp (24 KB), preview examples/vse-gamma-cross/preview.webp (22 KB), both written by scripts/render_hero.py on Blender 5.2.1 LTS.

Gate numbers (5.2.1, README --output command, EEVEE)

  • Framing: fill x=0.697, y=0.850 (the y axis is in the 0.70 to 0.90 band); margins left 0.122, right 0.181, bottom 0.061, top 0.089; no edge touch or cross. framing_ok.
  • Contact sheet (luma / stage / warmth / sat):
    • candidate 0.2241 / 0.2167 / +0.043 / 0.246
    • armature-bend 0.2787 / 0.2132 / -0.428 / 0.144
    • damped-track-aim 0.1511 / 0.1448 / +0.277 / 0.231
    • bmesh-gear 0.2358 / 0.1772 / +0.303 / 0.250
  • Verdicts:
    • Stage darkness: pass. Luma 0.224 is inside the calibration range 0.151 to 0.279.
    • Wedge warmth: pass, but weaker than two of the three references. The warm pool is visible on the back wall upper right; the cool emitted blue half of the screen pulls the measured warmth down to +0.04.
    • Subject fill: pass (y 0.85).
    • Saturation: pass. 0.246 is on par with bmesh-gear.
    • Thumbnail legibility: pass. At 427x240 the grey valley on the top strip against the violet middle of the bottom strip reads immediately.
  • measure_hero_drift.py --only vse-gamma-cross: mean_abs 0.00338, luma 0.2241/0.2237, matches.

Check runs (check-only path)

Binary Reported version Result
E:\Blender-Developer-Tools\.scratch\blender-5.2.1-windows-x64\blender.exe Blender 5.2.1 LTS exit 0, q_err 2.71e-3, lerp_mid_dev 0.250; run_example.py PASS
E:\Blender-Developer-Tools\.scratch\blender-5.1.2-windows-x64\blender.exe Blender 5.1.2 exit 0, same numbers; run_example.py PASS
E:\Blender-Developer-Tools\.scratch\blender-4.5.11-windows-x64\blender.exe Blender 4.5.11 LTS exit 0, same numbers; run_example.py PASS

The --output render path also ran on all three binaries (EEVEE): exit 0, identical filmstrip guard and framing numbers.

Falsifiers (5.2.1)

Probe Result
--swap-inputs exit 4, GC inputs are not T1 -> T2
naive lerp as the expectation exit 6, deviation 0.2490 at (frame 17, R)
endpoint-inclusive t, (f-start)/(duration-1) exit 5, t 0.129 vs 0.125
render: strips built before the tile resolution (letterbox) exit 9, in-frame spread 1.0
render: GAMMA_CROSS wired as the "linear" strip exit 9, linear mid error 0.249

The probes were temporary copies of the script with a single line replaced; they have been deleted.

Proven by live run

  • All check runs, falsifiers, framing numbers, contact-sheet metrics and the drift measurement above.
  • CROSS is linear in the sequencer (mid 0.498/0.259/0.498 against lerp 0.5/0.26/0.5), measured by the guard on every render run.

Established by inspection only

  • The claim that the mounted screen pixels equal the tiled sequencer bytes rests on closest-texel sampling, emission strength 1 and the Standard view transform. It was not measured as a separate pixel diff of the final still.
  • The CI 4.5 job may run a newer 4.5.x point release than the local 4.5.11.

🤖 Generated with Claude Code

…grading monitor

The old hero was a dark board of six small chips with unreadable labels;
the key comparison was two near-identical lavender squares, and the chips
were emission colors re-encoded through the view transform, not the
sequencer's own pixels.

The render now shows every frame of the cross, rendered by the VSE and
tiled unaltered into two filmstrips: GAMMA_CROSS on top, the sequencer's
linear CROSS directly beneath, mounted with closest-texel emission on a
hooded grading monitor beside a three-trackball control surface. The
endpoints change to orange (1, 0.36, 0) and azure (0, 0.16, 1), whose
per-channel square roots sum to 1, so the gamma midpoint is a neutral
0.25 and the dip below the lerp is the per-channel maximum 0.25 (was
0.115) - a dark valley versus violet that reads at card size.

The check logic is unchanged; the render path gains the Layer 1 framing
gate (exit 10) and a filmstrip guard (exit 9): every frame uniform (5.2
COLOR strips bake scene size at creation, so strips built before the tile
resolution letterbox), and each strip's mid frame on its closed form.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Signed-off-by: TMHSDigital <[email protected]>
@github-actions github-actions Bot added examples Runnable smoke-gated examples under examples/ documentation Improvements or additions to documentation labels Sep 26, 2026
@TMHSDigital
TMHSDigital merged commit a286d13 into main Sep 26, 2026
11 checks passed
@TMHSDigital
TMHSDigital deleted the fix/hero-vse-gamma-cross branch September 26, 2026 23:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation examples Runnable smoke-gated examples under examples/

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant